package com.spc.car.service.domain.dto;

import com.spc.car.service.validate.group.BaseInfo;
import com.spc.car.service.validate.group.ExtendInfo;
import lombok.Data;

import javax.validation.GroupSequence;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.Date;

@Data
@GroupSequence({BaseInfo.class, ExtendInfo.class, ProjectTenderingRequiredDTO.class})
public class ProjectTenderingRequiredDTO {

    @NotNull(groups = {BaseInfo.class})
    private Integer id;

    /**
     * 招标项目编号
     */
    @NotBlank(groups = {BaseInfo.class})
    private String code;

    /**
     * 项目类型:  见base_project_type
     */
    @NotBlank(groups = {BaseInfo.class})
    private String projectType;

    /**
     * 招标项目名称
     */
    @NotBlank(groups = {BaseInfo.class})
    private String projectName;

    /**
     * 招标方式（IB: 邀请招标 OT: 公开招标; CN:竞争性谈判 CC: 竞争性磋商 IP: 询价采购 SS:单一来源采购 ）
     */
    @NotBlank(groups = {BaseInfo.class})
    private String tenderManner;

    /**
     * 资格审查方式（01-资格预审；02-资格后审（默认））
     */
    @NotBlank(groups = {BaseInfo.class})
    private String seniorityCheck;

    /**
     * 项目机构/招标人
     */
    @NotBlank(groups = {BaseInfo.class})
    private String tenderee;

    /**
     * 招标组织形式（S-自行招标；E-委托招标(默认)）
     */
    @NotBlank(groups = {BaseInfo.class})
    private String tenderOrgForm;

    /**
     * 招标联系人
     */
    @NotBlank(groups = {BaseInfo.class})
    private String contacts;

    /**
     * 招标联系电话
     */
    @NotBlank(groups = {BaseInfo.class})
    private String contactsPhone;

    /**
     * 招标交易方式（0纸质招标；1电子招标(默认)；2电子及纸质招标）
     */
    @NotBlank(groups = {BaseInfo.class})
    private String tendereeTradeType;

    /**
     * 总投资（单位：元）
     */
    @NotNull(groups = {BaseInfo.class})
    @Min(value = 1, message = "总投资金额错误")
    private BigDecimal totalInvestment;

    /**
     * 项目规模
     */
    private String scale;

    /**
     * 项目实施地点
     */
    private String projectForcePlace;

    /**
     * 资金来源（0国有资金投资；1国有资金投资控股或占主导地位；2自筹资金控股或占主导地位；3全部自筹资金；4其他）
     */
    @NotBlank(groups = {BaseInfo.class})
    private String fundSource;

    /**
     * 资金状态（默认空；F-已到；N-未到）
     */
    @NotBlank(groups = {BaseInfo.class})
    private String fundStatus;

    /**
     * 项目概况
     */
    private String projectOverview;

    /**
     * 行业分类
     */
    @NotBlank(groups = {BaseInfo.class})
    private String categoryCode;

    /**
     * 立项/概算金额
     */
    @NotNull(groups = {BaseInfo.class})
    @Min(groups = {BaseInfo.class}, value =  1, message = "立项金额错误")
    private BigDecimal estimatedAmount;

    /**
     * 招标地址
     */
    @NotBlank(groups = {BaseInfo.class})
    private String biddingAddress;

    /**
     * 立项/审批文号
     */
    @NotBlank(groups = {BaseInfo.class})
    private String approvalNumber;

    /**
     * 项目审批、核准备案机关
     */
    @NotBlank(groups = {BaseInfo.class})
    private String approvingAuthority;

    /**
     * 代理联系人
     */
    @NotBlank(groups = {BaseInfo.class})
    private String actingContact;

    /**
     * 代理联系人电话
     */
    @NotBlank(groups = {BaseInfo.class})
    private String actingContactPhone;

    /**
     * 项目行政区域
     */
    @NotBlank(groups = {BaseInfo.class})
    private String projectAdministrativeArea;

    /**
     * 招标开始时间
     */
    @NotNull(groups = {ExtendInfo.class})
    private Date applyBeginTime;

    /**
     * 招标截止时间
     */
    @NotNull(groups = {ExtendInfo.class})
    private Date applyEndTime;

    /**
     * 提问开始时间
     */
    @NotNull(groups = {ExtendInfo.class})
    private Date questionStartTime;

    /**
     * 答疑截止时间
     */
    @NotNull(groups = {ExtendInfo.class})
    private Date answerEndTime;

    /**
     * 开标时间
     */
    @NotNull(groups = {ExtendInfo.class})
    private Date tenderOpenTime;
}
